{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Claude Code UI States Schema",
  "description": "Schema for Claude Code UI reconstruction states. Each scene has a state_type and type-specific payload.",

  "definitions": {
    "claude_ui_scene": {
      "type": "object",
      "properties": {
        "scene_id": { "type": "string" },
        "state_type": {
          "type": "string",
          "enum": [
            "idle_state",
            "context_reset_state",
            "multi_agent_task_state",
            "bash_success_state",
            "bash_error_state",
            "write_file_state",
            "update_diff_state",
            "task_progress_state",
            "final_status_state",
            "read_file_state",
            "edit_file_state",
            "thinking_state"
          ]
        },
        "duration_seconds": { "type": "number", "minimum": 2, "maximum": 12 },
        "payload": { "type": "object" }
      },
      "required": ["scene_id", "state_type", "duration_seconds", "payload"]
    },

    "idle_state_payload": {
      "type": "object",
      "properties": {
        "mode": { "type": "string", "enum": ["chat", "code"] },
        "prompt_placeholder": { "type": "string" },
        "status_bar": {
          "type": "object",
          "properties": {
            "permission_mode": { "type": "string" },
            "hint": { "type": "string" },
            "interrupt": { "type": "string" },
            "context_used": { "type": "string" }
          },
          "required": ["permission_mode"]
        }
      },
      "required": ["mode"]
    },

    "context_reset_state_payload": {
      "type": "object",
      "properties": {
        "reset_type": { "type": "string", "enum": ["full_reset", "compression", "summary"] },
        "message": { "type": "string" },
        "old_tokens": { "type": "string" },
        "new_tokens": { "type": "string" }
      },
      "required": ["reset_type", "message"]
    },

    "multi_agent_task_state_payload": {
      "type": "object",
      "properties": {
        "main_task": {
          "type": "object",
          "properties": {
            "title": { "type": "string" },
            "elapsed": { "type": "string" },
            "tokens": { "type": "string" },
            "status": { "type": "string", "enum": ["running", "done", "blocked"] }
          },
          "required": ["title", "elapsed", "tokens", "status"]
        },
        "subtasks": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": { "type": "string" },
              "status": { "type": "string", "enum": ["running", "done", "pending", "blocked"] },
              "indent": { "type": "integer", "minimum": 0, "default": 1 }
            },
            "required": ["title", "status"]
          }
        },
        "agents": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "role": { "type": "string", "enum": ["main", "worker"] },
              "status": { "type": "string", "enum": ["active", "running", "done", "pending"] },
              "task": { "type": "string" },
              "elapsed": { "type": "string" },
              "tokens": { "type": "string" }
            },
            "required": ["name", "role", "status"]
          }
        },
        "permission_bar": {
          "type": "object",
          "properties": {
            "mode": { "type": "string" },
            "hint": { "type": "string" },
            "interrupt": { "type": "string" }
          },
          "required": ["mode"]
        }
      },
      "required": ["main_task", "subtasks", "agents", "permission_bar"]
    },

    "bash_state_payload": {
      "type": "object",
      "properties": {
        "command": { "type": "string" },
        "output_lines": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "text": { "type": "string" },
              "color": { "type": "string", "enum": ["white", "green", "red", "yellow", "dim"] }
            },
            "required": ["text"]
          }
        },
        "exit_code": { "type": "integer" }
      },
      "required": ["command", "output_lines", "exit_code"]
    },

    "write_file_state_payload": {
      "type": "object",
      "properties": {
        "file_path": { "type": "string" },
        "lines_written": { "type": "integer" },
        "content_preview": { "type": "string" },
        "status": { "type": "string", "enum": ["created", "overwritten", "error"] }
      },
      "required": ["file_path", "lines_written", "status"]
    },

    "update_diff_state_payload": {
      "type": "object",
      "properties": {
        "file_path": { "type": "string" },
        "diff_lines_added": { "type": "integer" },
        "diff_lines_removed": { "type": "integer" },
        "diff_preview": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "type": { "type": "string", "enum": ["add", "remove", "context"] },
              "text": { "type": "string" }
            },
            "required": ["type", "text"]
          }
        }
      },
      "required": ["file_path", "diff_lines_added", "diff_lines_removed"]
    },

    "task_progress_state_payload": {
      "type": "object",
      "properties": {
        "task_id": { "type": "string" },
        "subject": { "type": "string" },
        "description": { "type": "string" },
        "status": { "type": "string", "enum": ["in_progress", "completed", "blocked"] },
        "progress_percent": { "type": "integer", "minimum": 0, "maximum": 100 }
      },
      "required": ["task_id", "subject", "status", "progress_percent"]
    },

    "final_status_state_payload": {
      "type": "object",
      "properties": {
        "verdict": { "type": "string", "enum": ["PASS", "FAIL", "PASS_WITH_ERRORS"] },
        "summary": { "type": "string" },
        "file_count": { "type": "integer" },
        "elapsed": { "type": "string" },
        "token_usage": { "type": "string" }
      },
      "required": ["verdict", "summary"]
    }
  },

  "type": "object",
  "properties": {
    "$schema": { "type": "string" },
    "project": { "type": "string" },
    "scenes": {
      "type": "array",
      "items": { "$ref": "#/definitions/claude_ui_scene" }
    }
  },
  "required": ["project", "scenes"]
}
